Mysql 如果在后端使用验证,即使数据库表列必须不为空,但它是否可以为空,这有关系吗?
我正在考虑合并以下两个表:Mysql 如果在后端使用验证,即使数据库表列必须不为空,但它是否可以为空,这有关系吗?,mysql,database,Mysql,Database,我正在考虑合并以下两个表: Table: images Columns: id, name, description, user_id, file_name, upvotes, downvotes, views Table: album_images Columns: id, album_id, file_name 我担心的是,如果我合并它们,我必须使名称、描述、向上投票、向下投票和视图为空,因为album_图像没有这些信息,但我的图像肯定应该有这些信息 我正在验证HTML表单中的信息。问问
Table: images
Columns: id, name, description, user_id, file_name, upvotes, downvotes, views
Table: album_images
Columns: id, album_id, file_name
我担心的是,如果我合并它们,我必须使名称、描述、向上投票、向下投票和视图为空,因为album_图像没有这些信息,但我的图像肯定应该有这些信息
我正在验证HTML表单中的信息。问问自己这个问题:合并表的好处是什么 缺点是显而易见的。使用两个表,DBMS可以强制执行关系完整性:必须存在的必需值,否则将拒绝该行。这是万无一失的。无论在其他任何地方检查,强制执行都是有效的 如果您想要一个表,以便可以同时查询两个表,这就是为什么会发明视图。创建一个作为两个表的并集的视图,并使用它 作为程序员,我们学习如何排除冗余。有时,我们会看到冗余,然后说,嘿,我可以合并这两个。然而,在SQL数据库中,这种本能是反向的:在SQL中,冗余通常通过添加表而不是删除表来消除
看看您的列名,我想知道file_name是否指两个表中的图像文件,图像由id表示?如果是这样,您可以通过消除album_images.file_name来消除冗余,从而提高引用完整性。如果您需要相册图像的文件名,这就是JOIN的用途 当前的结构允许您在每个相册中有多个图像,这是我从word album中期望的,如果您合并它们,您将在相册中放置的每个图像中复制相册的所有信息。这是一个令人头疼的问题,原因有几个,包括如果你想更改相册的任何内容,你必须更新包含该数据的所有行。我不建议你这么做。你为什么要让它们为空?如果合并它们,则必须复制数据,而不是将其保留为空。正如@GrumpyCrouton所说,这种非规范化是糟糕的设计。