在MySQL数据库中,我有一个包含4列的“places”表:
id | street | city | name
我希望更改表格,使其成为:
表格地址:
id | street | city
放置表格:
id | address_id | name
显然,address_id是fk到地址表的id。
最好的方法是什么,最好放在一个脚本中,以便我可以反复为localhost,dev和prod env做这个?
答案 0 :(得分:0)
-- create table addresses with the required columns size and indexes
-- if you have any existing data, insert it in the new table
INSERT INTO Addresses
SELECT Street, City FROM Places
-- if you have any constraints on those columns, remove them
ALTER TABLE Places DROP Street, City
ALTER TABLE PLACES ADD Address_Id int
-- add foreign key constraint
答案 1 :(得分:0)
看起来您需要的是VIEW和新的type UserValidator = Validator ([GeneralError], UserError [FieldError])
validateEmail :: UserInput -> UserValidator Email
validateEmail i = Validator v
where v e
| '@' `elem` toString e = pure e
| otherwise = Validation $ Left ([], UserTemplate [] [] [FieldError "missing @"])
validateName :: UserInput -> UserValidator Name
validateName = ...
validateAge :: UserInput -> UserValidator Age
validateAge = ...
userValidator :: UserInput -> UserValidator User
userValidator input = validate $ UserTemplate {
name = validateName input,
age = validateAge input,
email = validateEmail input
}
表格。如果您不熟悉该概念,则视图是一个虚拟表,它是从真实表生成并不断更新的,因此您不必重新创建任何表。所以:
places
我将假设您不只是想在新的CREATE VIEW addresses AS
SELECT id as address_id, street, city
FROM places;
中使用原始ID两次,因此请使用places
id字段创建新表,其他列则为想要,然后你可以在需要时运行插入:
AUTO_INCREMENT