poppaluv Posted June 11, 2004 Share Posted June 11, 2004 I have a relational database which has two tables that have a multiple to multiple relationship. As an example think of a user management system which allows users to belong to multiple groups for ease of assigning permissions. The table that stores information about which groups a user is a member of has a column for the user_id and a column for the group_id. The table should not allow the entry of two records with the same user_id and group_id. Is there a syntax for defining this kind of UNIQUE index in MySQL? I'm currently using PHP to ensure that the record doesn't exist before inserting it, but I'd love to have the database coded properly to ensure this doesn't happen. Thanks, Michael Web Emulsion Quote Link to comment Share on other sites More sharing options...
wct Posted June 12, 2004 Share Posted June 12, 2004 Hello, can your DB-System no "primary key"? In your group-table the group-id and the user-id should be the primary key! This protects a duplicate tuple. If i understand you right, is it what you will. Further, you should check, if you can use a "foreign-key". This means the user-id can only inserted if the user-id exists in the user-table. What DB-System is used ? Hagen Quote Link to comment Share on other sites More sharing options...
poppaluv Posted June 30, 2004 Author Share Posted June 30, 2004 Thanks for your help. I'm using MySQL. I would like to code it to work with version 3.23.44 but if I need to use 4.0.1 or higher that is fine too. In order to use Foriegn Keys I guess I would need to use InnoDB tables. Right now my tables are MyISAM. But the benifits of checking with the keys in other tables would probably pay off in the long run. Both the user_id and group_id would be foreign keys. Could you give me a SQL code example of how to define the keys for the tables? I don't quite understand how to define them. For example lets say there are two columns A & B which need indexing. How would I define two separate unique indexes for each column? How would I define a single unique index for the combination of the two columns? Thanks Quote Link to comment Share on other sites More sharing options...
phlipout Posted August 31, 2004 Share Posted August 31, 2004 Try adding a third column to the table, which would act as the primary key. In this column, you would insert the concatenated values of the user id and the group id. That way, you can never enter the user twice with the same group. For example: table: create table groups(id int(12) not null, uid, int (12) not null, group int(12) not null, primary key(id), key users(u_id)); Then, whenever you insert into the table, you would provide three values id = $uid . $grp_id uid = $uid group = $group And there you have it. I hope that helps -Chris Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.