Как вы можете условно обновить таблицу на основе текущего года? (Oracle SQL)

#sql #oracle

#sql #Oracle

Вопрос:

В настоящее время я выполняю школьный проект, в котором нам нужно создать базу данных для компании по управлению недвижимостью. У меня есть около 14 таблиц, но только эти две имеют отношение к моему вопросу: BUILDING и TaxRates .

Запрашивается информация о налогах (в долларах США) за год для каждого здания. Налоги рассчитываются на основе ставок в TaxRates таблице и стоимости земли в Building таблице. Каждый год добавляются новые значения, а также сохраняются исторические показатели.

Как я могу обновить налоги в Building таблице, чтобы указанная сумма учитывала текущий год, а также город?

Я предполагаю, что мне нужно начать так, но я не уверен, что делать дальше и как учитывать текущий год.

 UPDATE Building
SET taxes =
CASE WHEN 
  
 CREATE TABLE Building (
    buildingID          NUMBER (10) NOT NULL PRIMARY KEY,
    addressID           NUMBER (10) NOT NULL,
    qtyUnits            NUMBER (3) NOT NULL,
    landValue           NUMBER (15) NOT NULL,
    purchasePrice       NUMBER (15) NOT NULL
    taxes               NUMBER (15) NOT NULL
);

CREATE TABLE TaxRates (
    taxID          NUMBER (5) NOT NULL PRIMARY KEY,
    city           VARCHAR2 (50) NOT NULL,
    taxRate        NUMBER (3) NOT NULL,
    year           NUMBER (4) NOT NULL,
);

  

РЕДАКТИРОВАТЬ: На самом деле есть еще одна таблица, которая имеет значение. AddressDetails Таблица. Ставка налога варьируется в зависимости от города.

 CREATE TABLE AdressDetails (
    addressID   NUMBER (10) NOT NULL PRIMARY KEY,
    streetNo    Number (10) NOT NULL,
    streetName  VARCHAR2 (50) NOT NULL,
    postalCode  VARCHAR2 (6) NOT NULL Check
    city        VARCHAR2 (10) NOT NULL,
    province    VARCHAR2 (10) NOT NULL,
    buildingID  NUMBER (10) NOT NULL,
)```
  

Комментарии:

1. Вы должны правильно сообщить нам, каково условие соединения между таблицами, а не заставлять нас выяснять это самостоятельно. Ваш дизайн также кажется мне подозрительным, например, что buildingID делает в AdressDetails ? Кроме того, добавьте несколько выборочных строк из каждой соответствующей таблицы, чтобы стало проще ее моделировать и предоставить вам решение, которое ближе к вашим ожиданиям.

Ответ №1:

Если вы хотите сохранить данные для каждого здания с указанием суммы налога за определенный год, вам понадобится другая таблица со столбцами здание, уплаченный налог и год.

Таким образом, столбец taxes исчезнет из вашей таблицы building, а новая таблица building_tax будет иметь внешние ключи к таблицам building и tax

Еще одна вещь, которую следует учитывать, будет ли стоимость земли меняться каждый год и будет ли она частью расчета налога??

Комментарии:

1. Налоги, отображаемые в Building таблице, относятся к текущему году. Для целей этого проекта нам не нужно сохранять историческую стоимость или исторические налоги в долларах. Все, что нам нужно, это таблица с историческими ставками налогов. Я знаю, что это не имеет особого смысла, но это то, что запрашивается. РЕДАКТИРОВАТЬ: В принципе, я хочу, чтобы столбец налоги обновлялся на основе налоговой ставки и стоимости земли, но налоговая ставка должна быть получена из таблицы налоговых ставок путем проверки соответствия столбца год текущему году.

2. Одна из возможностей — написать триггер в таблице налогов, после каждой вставки переходить к построению таблицы и устанавливать новое рассчитанное значение налога.