Как создать большое количество таблиц - PullRequest
0 голосов
/ 13 октября 2019

У меня есть большой набор данных, с которым нужно работать, чтобы создать систему хранения для отслеживания движения в магазине. В этом магазине более 300 товаров, и основная структура всех столов одинакова. Единственная разница - данные внутри. Существует большая база данных с именем StorageTF, и я хочу создать множество таблиц с именем Product_1, Product_2, Product_3 и т. Д. Структура таблицы должна выглядеть следующим образом:

Основной большой набор данных (таблица) выглядит следующим образом:

CREATE TABLE StoringTF (
Store_code INTEGER,
Store TEXT,
Product_Date TEXT,
Permission INTEGER,
Product_Code INTEGER,
Product_Name TEXT,
Incoming INTEGER,
Unit_Buying_Price INTEGER,
Total_Buying_Price INTEGER,
Outgoing INTEGER,
Unit_Sell_Price INTEGER,
Total_Sell_Price INTEGER,
Description TEXT)

Я хочу, чтобы пользователь ввел код в запись с именем PCode, это выглядит так:

PCode = Entry(root, width=40)
PCode.grid(row=0,column=0)

, затем функция сравнивает ввод со всеми кодами в основной таблице и принимает этоодин и получает таблицу, которая имеет тот же код продукта. Итак, последовательность есть. Будут созданы все таблицы продуктов для всех кодов продуктов в основной таблице, и в них будут все данные из основной таблицы с одинаковым кодом продукта. Затем, когда программа открыта, пользователь вводит код продукта, программа выбирает таблицу с тем же кодом и показывает ее пользователю. Большое спасибо, и я знаю, что это сложно, но мне действительно нужна ваша помощь, и я уверен, что вы можете мне помочь. Спасибо.

Таблица продуктов должна выглядеть следующим образом:

CREATE TABLE Product_x (Product_Code INTEGER, 
    Product_Name TEXT, --taken from main table from lines that has same product code
    Entry_Date, TEXT,
    Permission_Number INTEGER,
    Incoming INTEGER,
    Outgoing INTEGER,
    Description TEXT,
    Total_Quantity_In_Store INTEGER, --which is main table's incoming - outgoing
    Total_Value_In_Store INTEGER --main table's total_buying_price - total_sell_price
    )

Спасибо за вашу помощь и надеюсь, что вы сможете понять это, потому что я действительно борюсь с этим.

1 Ответ

0 голосов
/ 13 октября 2019

Из вашего комментария:

Я думаю, что я бы выбрал некоторые столбцы из основной таблицы, но я не знаю, как обновить только некоторые столбцы с выбранными столбцами из основной таблицы, где продуктcode = PCode.get () "который является полем ввода". это возможно.

Да, определенно возможно представить пользователю только определенные строки и столбцы данных.

Однако существует множество шаблонов (т.е. методов программирования), которые вы могли бы использовать дляпредставление данных пользователю, но каждый распространенный метод наилучшей практики всегда отделяет внутренние данные (т. е. базу данных) от пользовательского интерфейса. Нет необходимости ограничивать представление данных одной таблицей за раз. В большинстве случаев данные никогда не должны представляться и / или предоставляться пользователю в точности так, как они представлены в таблице. Конечно, иногда данные являются простыми и достаточно прямыми, чтобы сделать это, но большинство приложений переформатируют и группируют данные в различных представлениях для правильного представления. (Здесь термин view предназначен для обозначения очень общего абстрактного термина, представляющего данные альтернативным способом по сравнению с тем, как они хранятся. Ниже я упоминаю конкретные представления sqlite.)

Вся философия, лежащая в основесовременные базы данных предназначены для эффективного, хорошо спроектированного хранилища, которое можно запрашивать , чтобы возвращать только те данные, которые подходят для каждого приложения. Большая часть этой возможности основана на моделях данных на языке хоста, но sqlite напрямую поддерживает функции, помогающие с этим. Например, view может быть определено для выбора только определенных столбцов и строк за раз (т.е. выбрать определенные значения Produce_Code). sqlite view - это просто SQL-запрос, который сохраняется и может иметь определенные свойства и действия, определенные для него. По умолчанию представление sqlite доступно только для чтения, но можно определить триггеры, чтобы разрешить обновления базовых таблиц через представление.

Из моего предыдущего комментария :Вам следует изучить нормализацию данных . Это ключевой принцип проектирования реляционных баз данных. Например, вам следует избегать дублирования столбцов данных, таких как Product_Name. Этот столбец должен быть только в StoringTF. Вычисляемые столбцы также обычно избыточны и не нужны - не храните столбец Total_Value_In_Store, а вычисляйте его при необходимости по запросу и / или view . Наличие дублированных столбцов вызывает несоответствующие данные или, по крайней мере, ненужную заботу о том, чтобы все столбцы синхронизировались при обновлении одного. Вместо этого вы можете просто запросить объединенные таблицы, чтобы получить связанные значения.

Честно говоря, эти концепции могут потребовать много изучения, прежде чем они будут реализованы должным образом. Во что бы то ни стало, продолжайте разработку решения, которое соответствует вашим потребностям, но в ответе «Переполнение стека» нет места для полных учебных пособий, которые, как я считаю, вам могут понадобиться. На самом деле ваш вопрос кажется больше об общем дизайне, и я думаю, что мой ответ поможет вам начать правильный путь. Что-нибудь более конкретное, и вам нужно будет задать другие вопросы позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...