我应该在DB或应用程序级别填充国家/地区名称吗?

时间:2011-01-09 15:13:29

标签: php mysql database

我正在做一个艰难的决定(至少对我而言)......

我的网站会根据所选国家/地区的下拉列表和城市列表列出国家/地区列表。我决定在数据库级别填充列表:

CREATE TABLE Country
(
    countryID - PK
    countryName - FK
);


CREATE TABLE City
(
    cityID   - PK
    countryID - FK
    cityName
);

CREATE TABLE Register
(
    registerID - PK
    cityID - FK

)

然而,这可能会增加php后端编码的复杂性,当将记录插入注册以及从国家/城市检索记录时,因为在注册表单上用户将在droplist上显示城市名称,用户将看不到cityID,所以我将不得不根据所选的cityName等获取cityID。因此,我说为什么我只是将应用程序级别的国家和城市列表放在固定的下拉列表中,并使寄存器表看起来像:

CREATE TABLE Register
(
    registerID - PK
    cityName
)

cityName直接插入,我们不必加入或调用多个表并获取城市的特定ID,以便我们可以获取cityName等...

我只会在关键表中进行规范化,例如在Member和Post / Thread表之间建立关系。成员可以拥有多个线程的一对多关系。否则,为了简单起见,将不会在数据库级别考虑与多值作为国家/地区列表相关的内容。

你怎么看?建议......

3 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解您的问题的文字,但为了回答您问题的标题,我会将国家/地区名称保留在数据库中。国家/城市确实不时更改其名称。

答案 1 :(得分:1)

数据的性质应该驱动数据库模型。不是你的前端问题。

为什么不将您的城市加载到下拉列表中?设置display text = cityName。设置value = cityID。

答案 2 :(得分:0)

我建议使用国家/地区名称/ ID作为元素来定义XML,将城市名称定义为子元素。它使它编辑/读取xml数据。我不确定你是否愿意考虑这一点。