Solar Posted April 17, 2013 Share Posted April 17, 2013 Hey PHPFreaks!I've ran into a problem and hoping you could help me out. I did not design these tables and I am having problems enforcing referential integrity.Is a constraint required for this task?Here are the two tablesClientsTable (ClientID, ClientName) VALUES("11111TOR","JOE");VALUES("22222OTT","BOB");VALUES("33333NEW","PAM"); TimezoneTable (Location, Timezone)VALUES("OTT", "EST")VALUES("TOR", "EST")VALUES("CAL", "MDI")VALUES("NEW","EST")There is a one to many relationship between TimezoneTable and ClientsTable. Due to the data, I cannot enforce referential integrity.What is a solution in joining these together? Could I do so by creating a new table? How could I go from there?Thanks in advanced,Solar Link to comment https://forums.phpfreaks.com/topic/277079-help-enforcing-referential-integrity/ Share on other sites More sharing options...
Barand Posted April 17, 2013 Share Posted April 17, 2013 Is the clientid unique without the location tacked on the end? In other words is there, or can there be, a 11111TOR and a 11111NEW for example? Link to comment https://forums.phpfreaks.com/topic/277079-help-enforcing-referential-integrity/#findComment-1425459 Share on other sites More sharing options...
Solar Posted April 17, 2013 Author Share Posted April 17, 2013 I don't see why not. The instructions given to me did not inform me that ClientID was unique or not. Would there be a huge difference if it was unique?If the concept is stripping the numbers off of ClientID and referencing it that way... is that possible? Link to comment https://forums.phpfreaks.com/topic/277079-help-enforcing-referential-integrity/#findComment-1425463 Share on other sites More sharing options...
Solar Posted April 18, 2013 Author Share Posted April 18, 2013 Apparently since I cannot enforce referential integrity, I must deal with it using an INNER JOIN statement if I want to run SELECT statements. INNER JOIN TimeZonesTableON Location=SUBSTRING(ClientID,6,3) Thanks Barand for your help. Link to comment https://forums.phpfreaks.com/topic/277079-help-enforcing-referential-integrity/#findComment-1425510 Share on other sites More sharing options...
Barand Posted April 18, 2013 Share Posted April 18, 2013 Sorry I didn't get back earlier - sleep time You could split the id field into 2 fields. If the numeric bit is not unique on its own (would be better if it were) then you would define a compound primary key using both fields. You could then define referential integrity for the location part. if it the combination of location/id that is unique then you could define the the table like this, ensuring clientid is unique within a location location CHAR(3) NOT NULL, clientid INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(location, clientid), KEY `loc` (`location`), CONSTRAINT `loc` FOREIGN KEY (`location`) REFERENCES `timezone` (`location`) Link to comment https://forums.phpfreaks.com/topic/277079-help-enforcing-referential-integrity/#findComment-1425583 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.