Q:

Delete operation - Multiple tables with many to many relationship

I have four tables and three junction tables to indicate many to many relationship.
This is created with general information that project binary will contain multiple application binaries, and each application binary may be built by multiple archives, sharedobjects, objects, binaries etc.and each archive or sharedobject or binary may be built by multiple source files ( .c, .cpp, .hpp, .h , sh , .java).
The questions are as below.
1. Is this design good enough? or there better ways to do this.
2. If I need to delete a project binary, what can be sql query.
3. If I need to delete only some binaries from BinaryList_table, what can be sql query and its implications on other table as there many to many relationships.
ProjectList_table
-----
ProjectBinaryId ProjectBinary   VersionInfo etc.    Market
1               NTG5_App          1.2               Japan
2               NTG5_App          1.3               Europe

------
AppList_table
-------
Appld   ApplicationBinary   VersionInfo
1       CarFU   
2       NavHU               1.1
3       MediaHU 
4       Connectivity    
5       QNX binaries    
6       NavHU               1.2
-------

ProjectBinary_AppJunctionTable  
-------
ProjectBinaryId AppId
1               1
1               2
1               3
1               4
1               5
2               5
2               4
2               6
------------------

BInaryList_Table    
--------------  
BinaryId    BinaryFileName  LicenseDetails
1           .so 
2           .a  
3           .so 
4           binary  
5           .a  
6           .a  
7           .so 
8           .o  
9           .a  
10          .so 
11          .so 
12          .a  
13          binary (shell command wo extn)  
-------------------------

App_BinaryJunctionTable 
---------------------
AppId   BinaryId
1        1
1        2
1        3
1        4
2        5
2        3
3        7
3        8
4        1
4        10
5        11
5        12
5        13
-----------

SourceInfo_Table
--------        
SourceId    Source file            License Details
1           .c, .cpp, .h,.sh .etc   
2           .c, .cpp, .h,.sh .etc   
3           .c, .cpp, .h,.sh .etc   
4           .c, .cpp, .h,.sh .etc   
5           .c, .cpp, .h,.sh .etc   
6           .c, .cpp, .h,.sh .etc   
7           .c, .cpp, .h,.sh .etc   
8           .c, .cpp, .h,.sh .etc   
9           .c, .cpp, .h,.sh .etc   
10          .c, .cpp, .h,.sh .etc   
11          .c, .cpp, .h,.sh .etc   
12          .c, .cpp, .h,.sh .etc   
13          .c, .cpp, .h,.sh .etc   
------------

Binary_SourceJunctionTable
-------------
BinaryId    SourceId
1           1
1           2
1           3
1           4
2           5
2           3
2           6
2           7
4           1
4           2
4           8
4           9
-------------

Hi Kevin
First  I created all project, app, and source info tables. Then I created projectbinary_AppJunctionTable with success, but when I tried to create app_binaryJunction table. I get error as pasted below  -
-ERROR 1022: Can't write; duplicate key in table 'appid_objid_junctiontable'
SQL Statement:
CREATE TABLE `trial`.`appid_objid_junctiontable` (
  `Id` INT NOT NULL,
  `app_id` INT NULL,
  `obj_id` INT NULL,
  PRIMARY KEY (`Id`),
  INDEX `app_id_idx` (`app_id` ASC),
  INDEX `obj_id_idx` (`obj_id` ASC),
  CONSTRAINT `app_id_fk`
    FOREIGN KEY (`app_id`)
    REFERENCES `trial`.`applisttable` (`Appld`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `obj_id_fk`
    FOREIGN KEY (`obj_id`)
    REFERENCES `trial`.`objectlist_table` (`ObjectId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)

-- 
Please help.
Edited on 21st July
Hi Kevin, Thanks for sql query. I tried to create junction table between projectbinary table and applisttable, but it fails as below.
CREATE TABLE trial.projid_appid_junctiontable ( 
  proj_id INT NOT NULL, 
  app_id INT NOT NULL, 
  PRIMARY KEY (proj_id, app_id), 
  FOREIGN KEY (proj_id) REFERENCES trial.projectlisttable (ProjectBinaryId) ON DELETE NO     ACTION ON UPDATE NO ACTION, 
  FOREIGN KEY (app_id) REFERENCES trial.applisttable (AppId) ON DELETE NO ACTION
);
Error code: 1215 Cannot add foreign key constraint.

A:

The design is fine for as much information you provided. My only complaint is "SourceInfo_Table" is not flat meaning it has column "Source file" with multiple values.  You should make another junction table.  Call it something like "sourceInfo_fileTypes" or whatever you want. Put the sourceID and the file type, one record for each file type.  Ideally you would also have another table called fileTypes and instead link to them with a foreign key.
As for the SQL to delete a project binary. You must remember that they have foreign key dependencies (assuming that you set up your constraints).  There are many ways to go about this.  Again, ideally you should have ON DELETE CASCADE on each foreign key.  This means when you delete something from project list, it automatically gets deleted elsewhere.  If you don't have that on and the constraints are already set then you want to delete the constraint like below, then add it with the clause. 
DROP CONSTRAINT: (do it for each one)
ALTER TABLE ProjectBinary_AppJunctionTable
DROP CONSTRAINT ProjectBinaryId; 

ADD CONSTRAINT WITH ON DELETE CASCADE: (do it for each one)
ALTER TABLE ProjectBinary_AppJunctionTable
ADD FOREIGN KEY (ProjectBinaryId)
REFERENCES ProjectList_table(ProjectBinaryId) ON DELETE CASCADE

Furthermore, to simply delete something from one of these tables use the generic code below.  Also, the above code should handle any dependencies if you set them right for each table.
DELETE FROM one_of_your_tables
WHERE on_of_you_columns=some_value_in_the_column;

EDIT JULY 18th:
You don't need to say constraint, its automatically a constraint if its a foreign key, only reason to say constraint is to name the key.  You don't need to index it here because it is being indexed as a primary key from another table.  You don't need another ID as the primary key it is useless.  All you need to do is say app_id combined with obj_id creates a primary key, meaning those two columns together will never be the same on another row.  Try the below code and see how it goes.
CREATE TABLE trial.appid_objid_junctiontable ( 
app_id INT NOT NULL, 
obj_id INT NOT NULL, 
PRIMARY KEY (app_id, obj), 
FOREIGN KEY (app_id) REFERENCES trial.applisttable (Appld) ON DELETE NO ACTION ON UPDATE NO ACTION, 
FOREIGN KEY (obj_id) REFERENCES trial.objectlist_table (ObjectId) ON DELETE NO ACTION
)

