- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含商店名称和地址的商店表。经过一番讨论,我们现在正在对表进行规范化,将地址放在单独的表中。这样做有两个原因:
新结构如下所示(忽略错别字):
country;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | varchar(2) | NO | PRI | NULL | |
| name | varchar(45) | NO | | NULL | |
| prefix | varchar(5) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
city;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| city | varchar(50) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
street;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| street | varchar(50) | YES | | NULL | |
| fk_cityID | int(11) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
address;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| streetNum | varchar(10) | NO | | NULL | |
| street2 | varchar(50) | NO | | NULL | |
| zipcode | varchar(10) | NO | | NULL | |
| fk_streetID | int(11) | NO | | NULL | |
| fk_countryID | int(11) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
*street2 is for secondary reference or secondary address in e.g. the US.
store;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(50) | YES | | NULL | |
| street | varchar(50) | YES | | NULL | |
| fk_addressID | int(11) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
*I've left out address columns in this table to shorten code
新表已经填充了正确的数据,唯一剩下的就是在 store
表中添加外键 address.id
。
以下代码正确列出了所有街道名称:
select a.id, b.street, a.street2, a.zipcode, c.city, a.fk_countryID
from address a
left join street b on a.fk_streetID = b.id
left join city c on b.fk_cityID = c.id
store
表中的 fk_addressID
?更新
似乎以下代码列出了所有具有正确地址的商店 - 但是它有点慢(我有大约 2000 家商店):
select a.id, a.name, b.id, c.street
from sl_store a, sl_address b, sl_street c
where b.fk_streetID = c.id
and a.street1 = c.street
group by a.name
order by a.id
最佳答案
我不会谈论拼写错误。由于您要导入数据,拼写错误最好在暂存表中处理。
让我们看看这个稍微简化的版本。
create table stores
(
store_name varchar(50) primary key,
street_num varchar(10) not null,
street_name varchar(50) not null,
city varchar(50) not null,
state_code char(2) not null,
zip_code char(5) not null,
iso_country_code char(2) not null,
-- Depending on what kind of store you're talking about, you *could* have
-- two of them at the same address. If so, drop this constraint.
unique (street_num, street_name, city, state_code, zip_code, iso_country_code)
);
insert into stores values
('Dairy Queen #212', '232', 'N 1st St SE', 'Castroville', 'CA', '95012', 'US'),
('Dairy Queen #213', '177', 'Broadway Ave', 'Hartsdale', 'NY', '10530', 'US'),
('Dairy Queen #214', '7640', 'Vermillion St', 'Seneca Falls', 'NY', '13148', 'US'),
('Dairy Queen #215', '1014', 'Handy Rd', 'Olive Hill', 'KY', '41164', 'US'),
('Dairy Mart #101', '145', 'N 1st St SE', 'Castroville', 'CA', '95012', 'US'),
('Dairy Mart #121', '1042', 'Handy Rd', 'Olive Hill', 'KY', '41164', 'US');
尽管很多人坚信邮政编码决定了美国的城市和州,但事实并非如此。邮政编码与承运人如何驾驶他们的路线有关,而不是与地理有关。一些城市横跨各州边界;单一邮政编码路线可以跨越州界线。连Wikipedia knows this ,尽管他们的例子可能已经过时了。 (送货路线不断变化。)
所以我们有一个表有两个候选键,
它没有非键属性。我认为这张表是 5NF。你怎么看?
如果我想提高街道名称的数据完整性,我可能会从这样的事情开始。
create table street_names
(
street_name varchar(50) not null,
city varchar(50) not null,
state_code char(2) not null,
iso_country_code char(2) not null,
primary key (street_name, city, state_code, iso_country_code)
);
insert into street_names
select distinct street_name, city, state_code, iso_country_code
from stores;
alter table stores
add constraint streets_from_street_names
foreign key (street_name, city, state_code, iso_country_code)
references street_names (street_name, city, state_code, iso_country_code);
-- I don't cascade updates or deletes, because in my experience
-- with addresses, that's almost never the right thing to do when a
-- street name changes.
您可以(并且可能应该)对城市名称、州名称(州代码)和国家/地区名称重复此过程。
您的方法存在一些问题
您显然可以输入美国街道的街道编号以及克罗地亚的国家/地区编号。 (可以说,城市的“全名”是您可能想要存储以提高数据完整性的事实。街道的“全名”可能也是如此。)
为每一位数据使用 ID 号会大大增加所需的连接数。使用 id 号码与规范化没有任何关系。使用没有对自然键的相应唯一约束的 ID 号——一个完全常见的错误——允许重复数据。
关于mysql - 规范化使得跨多个表的连接变得困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8232793/
tuple :: (Integer a,Fractional b) => (a,b,String) tuple = (18,5.55,"Charana") 所以这是给我的错误 ‘Integer’ is
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我已经习惯了python和django,但我最近开始学习java。由于工作原因我没有太多时间,所以错过了很多类(class),现在我有点困惑,我必须做作业。 编辑 该程序应该根据每个运动员在自行车和比
这是一个困难的问题,但对专业人士来说很容易。 我在 mysql 中有以下字段:产品名称、mycost、sellprice 和 stock。因为我需要知道每种产品对我的商店的投资有多少,所以我创建了以下
我有 3 个表,其中已包含以下行: TBL_TESTER_LIST id tester_type tester_name 1 LMX LMX-01 2 LMX
我想只使用 GridBagLayout 来布局组件,如图所示。 我已经尝试了几个约束,但它永远不会以预期的结果结束,所以我想知道仅使用 GridBagLayout 是否真的可行。难点在于C1、C2、C
我遇到了以下代码没有结果的问题。但是,如果我取消注释掉指定的行,并注释掉它起作用的 bind_param 行,但这不是破坏了 mysqli 的目的吗?我的 var_dump 给了我的字符串(1)“1”
这个问题在这里已经有了答案: a good python to exe compiler? [closed] (3 个答案) 关闭 9 年前。 有了我之前问题的一些有用答案(见下文),我决定再试一次
我正在使用 Hadoop 分析 GSOD 数据 (ftp://ftp.ncdc.noaa.gov/pub/data/gsod/)。我选择了 5 年来执行我的实验 (2005 - 2009)。我配置了一
我在我的 macOS 应用程序的设置面板中使用 NSGridView。我是这样设置的: class GeneralViewController: RootViewController { pr
我正在尝试使用以下代码在 PHP 中自动安装 WordPress 发行版: $base_dir = '/home/username/wordpress_location'; chdir($base_d
在 Node.js 中将图像转换为 Base64 字符串时,我遇到了一个非常令人困惑的问题 这是我的示例代码: app.get('/image', (req, res) => { ServerAP
我在尝试运行我的应用程序时遇到一些错误,这里是 logcat java.lang.RuntimeException: Unable to instantiate activity Componen
基本上,我正在努力创建一个管理团队和球员的 Java 程序。 根据我的理解,我会有一个团队和一个玩家类。在团队类中会有 get 和 set 方法,以及某种形式的集合来正确存储球员,例如数组列表?然后在
我仍在尝试找出 JavaSwing 中的 BorderLayout,这真的很令人沮丧。 我希望能够将一个 Pane 拆分为 3 个包含的子面板,但我不完全确定如何包含它。 这是我的游戏类,它包含面板
下面的表设计(完整的模式见下文)还有很多需要改进的地方,并且已经造成了许多困难,但是我无法找出如何最好地将它们规范化。这些表格的目的是: ICD9-提供CICD9和CDESC组合的主查找。每个组合在I
这是我的表格: AB元组表 C 表,其中包含 A.id 和 B.id 的条目 D 表,其中包含带有 C.id 的条目和一个 bool 字段“open” 我想计算 D 表中“open”= true 且具
我在 YouTube 上跟踪了一个相当旧的教程,在视频中他以这种方式使用了 mysql_result: return (mysql_result($result,0) == 1) ? true : f
我正在尝试创建一个左侧面板的页面。该面板有一个页眉、一个内容区域和一个页脚。主面板包装器 div 应该是页面高度的 100%。页眉和页脚没有指定的高度,因为我只希望它们足够大以容纳其文本和填充,而我希
我有 TreeView ,我想在其中显示用户通过 file_dialog.getOpenFileNames() 选择的文件; file_dialog 是 QFileDialog。我确实创建了模型类:
我是一名优秀的程序员,十分优秀!