如何在数据库中创建数据库(postgres)?

时间:2017-07-15 19:04:51

标签: database postgresql data-structures database-design

实际上我是菜鸟并坚持这个问题一个星期。我会尝试解释它。 我有USER的表, 和产品表 我想为每个产品存储每个用户的数据。像if_product_bought,num_of_items和all。

因此,只有解决方案,我才能想到数据库中的数据库,即在用户名为数据库的内部创建产品副本并开始存储。

如果可能的话,如何或有其他更好的解决方案 提前致谢

1 个答案:

答案 0 :(得分:1)

当您使用points=pd.read_csv(points_csv).dropna(subset=["Latitude", "Longitude"]) (或databasedatabase)时,您实际上创建table PostgreSQL或任何其他SQL RDBMS。

您使用tabletables。您通常会在JOINorders之上添加items_x_orders表格以及users表格。

这是一个非常简化的场景:

items

这一切都基于所谓的Relational Model。您正在考虑的是在某些NoSQL数据库中使用的其他称为Hierarchical modeldocument model的东西(您将数据存储为JSON或XML层次结构)。

您可以使用以下数据填充这些表:

CREATE TABLE users
(
    user_id INTEGER /* SERIAL */ NOT NULL PRIMARY KEY,
    user_name text
) ;

CREATE TABLE items
(
    item_id INTEGER /* SERIAL */ NOT NULL PRIMARY KEY,
    item_description text NOT NULL,
    item_unit text NOT NULL,
    item_standard_price decimal(10,2) NOT NULL
) ;

CREATE TABLE orders
(
    order_id INTEGER /* SERIAL */ NOT NULL PRIMARY KEY,
    user_id INTEGER NOT NULL REFERENCES users(user_id),
    order_date DATE NOT NULL DEFAULT now(),
    other_data TEXT
) ;

CREATE TABLE items_x_orders
(
    order_id INTEGER NOT NULL REFERENCES orders(order_id),
    item_id INTEGER NOT NULL REFERENCES items(item_id),

    -- You're supposed not to have the item more than once in an order
    -- This makes the following the "natural key" for this table
    PRIMARY KEY (order_id, item_id),

    item_quantity DECIMAL(10,2) NOT NULL CHECK(item_quantity <> /* > */  0),
    item_percent_discount DECIMAL(5,2) NOT NULL DEFAULT 0.0,
    other_data TEXT
) ;

然后您将生成如下所示的查询,其中JOIN所有相关表:

INSERT INTO users
   (user_id, user_name)
VALUES
   (1, 'Alice Cooper') ;

INSERT INTO items
   (item_id, item_description, item_unit, item_standard_price)
VALUES
   (1, 'Oranges', 'kg',  0.75),
   (2, 'Cookies', 'box', 1.25),
   (3, 'Milk',    '1l carton', 0.90) ;

INSERT INTO orders
   (order_id, user_id)
VALUES
   (100, 1) ;

INSERT INTO items_x_orders
   (order_id, item_id, item_quantity, item_percent_discount, other_data)
VALUES
   (100, 1, 2.5, 0.00, NULL),
   (100, 2, 3.0, 0.00, 'I don''t want Oreo'),
   (100, 3, 1.0, 0.05, 'Make it promo milk') ;

...并获得以下结果:

user_name    | item_description | item_quantity | item_unit | item_standard_price | item_percent_discount | items_price
:----------- | :--------------- | ------------: | :-------- | ------------------: | --------------------: | ----------:
Alice Cooper | Oranges          |          2.50 | kg        |                0.75 |                  0.00 |        1.88
Alice Cooper | Cookies          |          3.00 | box       |                1.25 |                  0.00 |        3.75
Alice Cooper | Milk             |          1.00 | 1l carton |                0.90 |                  5.00 |        0.86

您可以在 dbfiddle here

获取所有代码并进行测试