这两个表应该相关吗?

时间:2015-02-03 03:31:45

标签: php mysql foreign-keys primary-key innodb

我有account_tablenews_table。可以通过管理员帐户创建新闻。

account_table有4列,分别为:
account_id
2.用户名
3.密码
4. user_type

news_table有5列,分别为:
news_id
标题
消息
4. created_by
5. created_on

如果我要在account_id上设置news_table外键,那就意味着如果管理员被删除,他报告的新闻也会被删除,这不应该发生。当有一个名为account_id的列时,为什么news_table甚至与created_by相关,该列通过在创建新闻时将会话用户与{{1}一起插入“来填充},titlemessage列。

我真的很困惑这个小桌子的最佳设计。数据库中的每个表是否应该相互连接?

2 个答案:

答案 0 :(得分:0)

使用外键取决于您,它不是强制性的,它为您提供了一些功能,例如:

  • 确保您没有插入包含无效created_by
  • 的行
  • 当您删除帐户时,“if”,您可以自动删除新闻,这样就不会保留与现有帐户相关的新闻
  • 从设计的角度来看,如果你将sql结构加载到像Mysql Workbench这样的工具中,它会以可视方式指向表之间的连接

至于您担心删除帐户会导致删除新闻,这是不正确的。

定义外键时,它会询问您在删除记录时要执行的操作,删除新闻或将created_by设置为NULL。您应该选择设置为NULL,以便不必删除新闻。如果您不知道如何定义外键,可以使用像phpmyadmin这样的工具来完成它。

答案 1 :(得分:0)

如果您链接这两个表,如果外部可以为空,您仍然可以在保留新闻的同时删除该帐户。但那么这种关系的用例是什么?更有可能在您的用例中不需要这种关系。

如果我们总是创建关系,那么除了新闻之外,像帐户这样的共同对象可能与许多其他事物相关联。除非显然是必要的,否则我会避免创建关系。