php - 数据库设计 : Selecting and limiting Favorites

标签 php database database-design database-schema

现在在数据库中,我有一个Members 表和一个Products 表,以及一个连接Favorites 表,该表由来自MembersProducts 表。我需要限制成员(member)可以在 5 点放入收藏夹的产品数量。

这个限制从何而来?它是在数据库 (MySQL) 中完成的,因此将成为我现有模式的一部分吗?或者这是一个编程功能,可以用 PHP 之类的东西来完成?

最佳答案

问题已经得到解答,但是,因为您正在寻求理解......

数据库的想法是,所有此类数据限制和约束都放在数据库本身(作为一个独立的单元)中。数据约束应该在数据库中,而不仅仅是在应用程序中。 ISO/IEC/ANSI SQL 提供了几种类型的约束,用于不同的目的:

  • FOREIGN KEY 约束,用于参照完整性(以及性能;开放架构合规性等)

  • 检查约束,检查其他列的数据值,并禁止违规

  • RULE 约束,禁止超出范围的数据或指定准确的数据值格式

您的是经典的简单 RULE 或 CHECK。数据库和数据库设计的正确答案是规则或检查,而不是代码。

这并不是说应用程序不应该检查计数,并避免尝试无效操作。这是很好的感觉。而且它不是重复,它是在更高级别停止无效操作,从而节省资源使用。如果完整性在外部由开发人员编写的应用程序代码中进行管理,则无法依赖 Db 中的数据。可以依赖在服务器内部实现的规则,它们对所有应用程序或应用程序组件强制执行。

但是免费软件 Non-SQL 不具备标准 SQL 的基础知识。没有检查或规则。因此,数据库中数据的完整性完全取决于开发人员:他们的质量、知识、一致性等。

MySQL/PHP 的正确答案是代码。在每个尝试插入的位置。

关于php - 数据库设计 : Selecting and limiting Favorites,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675410/

相关文章:

php - 获取dropdown的值并在php中使用

php - 将 m/d/y(01/1/2001 示例)字符串存储为 DATE

c# - 从代码进行外部网站搜索

database - 我应该在单独的表中跟踪递增的 AccountNumber 吗?

php - Laravel 5.2 查找基于多对多关系的模型

php - MySQL 使用具有多个 LIKE 的 WHERE 子句

sql-server - 如何获取所有实例数据库的用户列表

database - 仅当根据 Firebird/Interbase 中的检查约束有效时,如何才能在表之间复制记录?

sql-server - 存储时间和星期几

javascript - 当我需要呈现 HTML 和 "simple text" View 时,在我的数据库中存储支持 Markdown 的字段的最佳方法是什么?