MySQL表设计 - 引用多个外部行

时间:2013-07-23 15:30:56

标签: mysql

最小化背景(即裸露的伪代码细节)

我正在为我的农场制作记录(除其他外)php / mysql应用程序。有很多类型的动物等可以有图片(或其他记录 - 视频等),但为了简单起见,我只会参考其中一个(山羊和图片)。所以说

表格大致如下:
CREATE TABLE BMD_farmrecords_goats (
      goat_id INT NOT NULL AUTO_INCREMENT,
      goat_name TEXT,
      ...more columns but whatever, unimportant...
      primary_key(goat_id))

CREATE TABLE BMD_farmrecords_pictures (
        media_id INT NOT NULL AUTO_INCREMENT,
        media_name TEXT,
        media_description TEXT,
        media_description_short TEXT,
        media_date_upload DATE,
        media_date_taken DATE,
        media_uploader INT, //foreign key constrained to user table but unimportant for question
        media_type ENUM('jpg','gif','png'),
        media_hidden BOOL,
        media_category INT, //foreign key constrained to category table but unimportant for question
        PRIMARY KEY  (media_id)

所以问题:

  • 显然,一张照片中可能有多只山羊,所以我不能只是 图中有一个外键是指山羊。
  • 有一个以上的牲畜餐桌,这也是一个不错的选择,但现在不担心
  • 基本上还没有应用优化(即没有设置长度,使用TEXT而不是varchar(长度))等;我并不担心这一点,直到我填充了一堆并确切地看到我想要的一切。

所以问题:  什么是将图片链接到多只山羊的最佳_ 方式(就A而言)最佳性能B)最佳代码符合标准。我想我将不得不做一个额外的桌子:

create TABLE BMD_farmrecords_goatpictures (
   id INT NOT NULL AUTO_INCREMENT
   picture_id INT //foreign key to BMD_farmrecords_pictures->media_id
   goat_id INT//foreign key to BMD_farmrecords_goats->goat_id

那么还有更好的方法吗?

当然使用该方法我可能不得不将* _goats表更改为父* _animals表,然后使用类型字段和引用animal_id,但我不担心,只是关于是否额外引用两个表的表是最好的方法。

感谢;

1 个答案:

答案 0 :(得分:0)

从讨论中改变我原来的想法到使用复合主键:

create TABLE BMD_farmrecords_goatpictures (
   picture_id INT //foreign key to BMD_farmrecords_pictures->media_id
   goat_id INT//foreign key to BMD_farmrecords_goats->goat_id
   PRIMARY KEY (picture_id, goat_id))