假设我有一个名为 的表User_FriendList
,它具有以下特征:
CREATE TABLE User_FriendList (
ID ...,
User_ID...,
FriendList_IDs...,
CONSTRAINT User_Friendlist_PK PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)
让我们假设该表包含以下数据:
+----+---------+---------------------------+ | 身份证| 用户 ID | 好友 列表_ID | +----+---------+---------------------------+ | 1 | 102 | 2:15:66:35:26:17: | +----+---------+---------------------------+ | 2 | 114 | 1:12:63:33:24:16:102 | +----+---------+---------------------------+ | 3 | 117 | 6:24:52:61:23:90:97:118 | +----+---------+---------------------------+
注:该“:”当(冒号)是分隔符爆炸在PHP成array
。
问题
所以:
这是一个方便的方式来“存储”的IDs
的FriendList
?
或者,相反,我是否应该让FriendId
每一行只有一个值,并且当我需要检索给定列表的所有行时,只需执行如下查询SELECT * FROM UserFriendList WHERE UserId = …
我正在为一个应用程序设计一个数据模型,它必须跟踪数据的变化。
第一步,我的应用程序必须支持PostgreSQL,但我想在第二步中添加对其他 RDBMS(尤其是 Oracle 和 MS SQL 服务器)的支持。因此,我想选择使用较少专有功能的便携式数据模型。(表的 DDL 可能因 RDBMS 供应商而异。但应用程序中的 SQL 查询/语句对于所有支持的供应商应尽可能相同。)
例如,假设有users
一张users_versions
桌子。users_versions
在 上有一个外键users
。
表的示例可能如下所示:
users
----------------
id | username
----------------
1 | johndoe
2 | sally
users_versions --> references id of user (userid)
---------------------------------------------------------------------------
id | userid | name | street | place | validfrom | validuntil
---------------------------------------------------------------------------
1 | 1 | John Doe | 2nd Fake St | Faketown | 2018-01-04 | 2018-01-05
2 | 1 …
Run Code Online (Sandbox Code Playgroud)