mysql - Referencing table with generated primary keys -
i trying increase constraint of mysql database schema adding foreign key constraint each table.
table 1: users
+---------+----------+------------- | id | username | other fields +---------+----------+------------- | 1 | john | | 2 | mark | +---------+----------+-------------
idint(11) unsigned not null auto_incrementusername` varchar(50) not null
primary key (
id)
table 2: disks (this has one many relationship users)
+---------+----------+-----------+------------- | id | id_user | disk_name | other fields +---------+----------+-----------+------------- | 1 | 1 | disk | | 2 | 2 | disk b | +---------+----------+-----------+-------------
idint(11) unsigned not null auto_increment
id_userint(11) not null,primary key (
id,id_user) indexfk_disks_idx(idasc)constraint
fk_disksforeign key (
id)references
database.users(id)on delete no action
on update no action)
table 3: files (this has one many relationship disks)
+---------+----------+----------+-----------+------------- | id | id_disk | id_user | file_name | other fields +---------+----------+----------+-----------+------------- | 1 | 1 | 1 | | | 2 | 2 | 2 | | +---------+----------+----------+-----------+-------------
idint(11) unsigned not null auto_increment
id_userint(11) not null
id_diskint(11) not nullprimary key (
id,id_disk,id_user) indexfk_files_idx(idasc,id_userasc)constraint
fk_filesforeign key (
id_disk,id_user,id_user)references
database.disks(id)on delete no action
on update no action)
table 2: files_on_nas (this has one one relationship files)
+-------+----------+----------+----------+-----------+------------- | id | id_files | id_user | id_disk | file_name | other fields +-------+----------+----------+----------+-----------+------------- | 1 | 1 | 1 | 1 | | | 2 | 1 | 2 | 2 | | +-------+----------+----------+----------+-----------+-------------
idint(11) unsigned not null auto_increment
id_filesint(11) not null,
id_userint(11) not null,
id_diskint(11) not null,primary key (
id,id_files,id_user,id_disk) indexfk_files_on_nas_idx(idasc)constraint
fk_files_on_nasforeign key (
id_files,id_user,id_disk)references
database.files(id,id_user,id_disk)on delete no action
on update no action)
question:
as can see more reference table in cascade more primary keys get. how can design database avoid replication of primary keys , therefore data duplication well? should delete auto incremented key each table? practice?
thanks
the id of disk sufficient uniquely identify disk. there's no reason include id of user disk's primary key. extremely bad idea, because means if disk's user changes, need modify primary key.
same file. file id uniquely identifies file. there's no reason add disk id primary key of file.
Comments
Post a Comment