Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想改善这个问题吗?更新问题,以使为on-topic。
6年前关闭。
Improve this question
我刚刚开始学习SQL(使用SQLite),并且试图弄清楚何时应使用外键。它向我解释的方式是,只要出现重复的数据,就应使用外键,并且只保存ID以节省空间。我正在创建的数据库中有数千条记录,其中列出了类别和县(每列中可能只有几十个唯一性)。因此,我可以为具有县名和主键ID的县创建单独的表,并对类别进行相同的操作。我毫不怀疑它将使数据库缩小约5%。但这是唯一的好处吗?看起来这使其他一切变得更加复杂。为县和类别添加ID,否则将不需要添加ID。当查看phpLiteAdmin中的表时,它仅显示一个数字而不是类别/县名,从而使其更难以可视化。在这种情况下使用外键并创建单独的表有什么优势?还是我不应该这样做,而是将所有数据(重复数据和所有数据)都保留在一个表中?还有-将县/类别表仅设为一列而没有数字主键是否有道理,因为无论如何它们都是唯一的?那至少会显示phpLiteAdmin中的全名。提前致谢!
想改善这个问题吗?更新问题,以使为on-topic。
6年前关闭。
Improve this question
我刚刚开始学习SQL(使用SQLite),并且试图弄清楚何时应使用外键。它向我解释的方式是,只要出现重复的数据,就应使用外键,并且只保存ID以节省空间。我正在创建的数据库中有数千条记录,其中列出了类别和县(每列中可能只有几十个唯一性)。因此,我可以为具有县名和主键ID的县创建单独的表,并对类别进行相同的操作。我毫不怀疑它将使数据库缩小约5%。但这是唯一的好处吗?看起来这使其他一切变得更加复杂。为县和类别添加ID,否则将不需要添加ID。当查看phpLiteAdmin中的表时,它仅显示一个数字而不是类别/县名,从而使其更难以可视化。在这种情况下使用外键并创建单独的表有什么优势?还是我不应该这样做,而是将所有数据(重复数据和所有数据)都保留在一个表中?还有-将县/类别表仅设为一列而没有数字主键是否有道理,因为无论如何它们都是唯一的?那至少会显示phpLiteAdmin中的全名。提前致谢!
最佳答案
如果您使用的是外键。它也称为参照完整性。
假设您有两个表,第一个表是account_user,第二个表是account_user_detail。
因此account_user表将具有account_id的account_number的主键。和account_user_detail表将具有帐户持有人的地址详细信息。
因此,如果您将两个表都关联起来,则account_number或account_id将相同。
因此,使用第二个表中的主键值定义外键。
外键标识第二个表中的account_number的值是第一个表中的Xyz先生对相同帐号的引用。
因此,外键用于将两个表与两个表共有的列共享相同的唯一值。
关于sql - 什么时候应该使用外键? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18930783/
10-16 15:20