这是正确的数据库设计吗?为什么我不是

时间:2015-09-11 19:16:17

标签: mysql sql database-design

我有两个表projsstudies,它们指的是我正在构建的网站上的内容类型,我的最新任务是我需要为每个项目添加图像轮播和研究(projsstudies的每一行。换句话说,每个项目和研究都需要有一个相关的图像轮播。

我在桌子上的位置:

   projs
id  |    ...   
----------------
  1 |    ...     
  2 |    ...  
  3 |    ...  

   studies
id  |   ...  
-----------------
  1 |   ...
  2 |   ...
  3 |   ...

我想成为或认为我应该成为:像

这样的东西
        projs
id  |    ...   | carid
------------------------
  1 |    ...   |   1
  2 |    ...   |   5
  3 |    ...   |   6

       studies
id  |   ...    | carid
-------------------------
  1 |   ...    |  2
  2 |   ...    |  3
  3 |   ...    |  4

     carousels
id  
------
   1
   2
   3
   4
   5
   6

      carousel_assets
id  |   imgurl  | carid
  1 |    ...    |  1
  2 |    ...    |  2
  3 |    ...    |  1
  4 |    ...    |  1
  5 |    ...    |  5
  6 |    ...    |  2
  7 |    ...    |  3
  8 |    ...    |  4
  9 |    ...    |  3
 10 |    ...    |  4
 11 |    ...    |  3
 12 |    ...    |  2
 13 |    ...    |  2

每个表中的carid引用id的{​​{1}}。

问题1:这是正确的设计????

我跑来创建两个新表的查询是

carousels

现在我要做的是将CREATE TABLE carousels (id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY; CREATE TABLE carousel_assets (id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, img VARCHAR (250), carid MEDIUMINT, FOREIGN KEY (carid) REFERENCES carousels(id) ON DELETE SET NULL; 列添加到caridprojs。我试过了

studies

并得到了非常不合理的错误

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'MEDIUMUINT,FOREIGN KEY(carid)DEFAULT NULL REFERENCES   第1行的旋转木马(id)'

问题2:导致该错误的查询有什么问题?

在每个页面上,让我们说,ALTER TABLE projs ADD carid MEDIUMUINT, FOREIGN KEY (carid) DEFAULT NULL REFERENCES carousels(id); 与上面示例中的轮播/studies/?id=1相关联,我需要将所有图像与该轮播相关联,我的查询应该是什么?

2 个答案:

答案 0 :(得分:1)

该错误具有足够的描述性。您在MEDIUMUINT中输入错字。将其替换为MEDIUMINT

ALTER TABLE projs
ADD carid MEDIUMINT, FOREIGN KEY (carid) DEFAULT NULL REFERENCES carousels(id);

答案 1 :(得分:0)

问题1.是主观的,但只要你的表格设计惯例规则一致,那就不错了。

问题2.这是您需要的查询吗?

ALTER TABLE projs ADD carid MEDIUMINT DEFAULT NULL, ADD FOREIGN KEY (carid) REFERENCES carousels(id);