数据库表列是否可为空,即使在后端使用验证时强制它不为空,这也无关紧要吗?

时间:2018-07-12 19:51:36

标签: mysql database

我正在考虑合并以下2个表:

Table: images
Columns: id, name, description, user_id, file_name, upvotes, downvotes, views

Table: album_images
Columns: id, album_id, file_name

我担心的是,如果我将它们合并,则必须使名称,描述,上投票,下投票和视图为空,因为album_images没有这些信息,但是我的图像肯定应该有这些信息。

我正在验证HTML表单中的信息。

1 个答案:

答案 0 :(得分:1)

问自己一个问题:合并表格有什么好处?

缺点很明显。使用两个表,您的DBMS可以强制执行关系完整性:必须存在必需的值,否则该行将被拒绝。这很简单。该执行无论在哪里都可以检查。

如果您想要一个“单个表”,以便可以一次查询两个表,这就是发明视图的原因。创建一个作为两个表的UNION的视图,并使用该视图。

作为程序员,我们学会了排除冗余。有时候诱惑是看到冗余,然后说:“嘿,我可以合并这两个”。但是,在SQL数据库中,这种本能是倒退的:在SQL中,通常通过添加表而不是删除表来消除冗余。

看看您的列名,我想知道file_name是否在两个表中都引用了图像文件,用id表示的图像?如果是这样,您可以通过消除album_images.file_name来消除冗余,从而提高参照完整性。如果您需要相册图像的文件名,那就是JOIN的目的。