Задать вопрос
  • Как правильно использовать составные первичные ключи в таблицах?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    0)
    Staff, Services и промежуточная таблица StaffServices
    https://brainstation.io/learn/sql/naming-conventions , https://www.sqlshack.com/learn-sql-naming-conventions/

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

    2)
    Какие могут быть плюсы и минусы данного подхода?
    Да нет тут плюсов. Уникальность записи через 2 значения даже из приложения юзать неудобно, особенно когда работаешь с фреймворками, которые соблюдают какой-никакой конвеншн.

    3)
    Есть ли альтернативы, которые стоит рассмотреть в подобных ситуациях?
    Нормальный первичный ключ через автоинкремент и уник на составной.

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

    5)
    Какие best practices существуют для таких случаев?
    Собсно выше основное описал.

    6)
    Буду рад услышать ваши мнения и советы!
    Велком.
    Ответ написан
    4 комментария
  • Почему выдает ошибку 404 NGINX?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Потому что у вас зачем-то в локейшене /api/category/ завершающий /, а он там не нужен. В текущем виде запрос /api/category обрабатывается локейшеном /.
    Ответ написан
  • Почему выдает ошибку 405 NGINX?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Обычно такое бывает, когда пытаются отправить POST в какой-то статический файл.

    Два вопроса:
    1. Бэкенд нормально реагирует на POST-запросы, отвечает?
    2. Пробовали ли без upstream'а?
    Ответ написан
    1 комментарий
  • Как корректно работать с react router?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вы создали не правильную структуру компонентов React Router. < Router> должен быть размещен в самом верху относительно вложенности всех компонентов, обычно это в районе < App>. Так же, для навигации Вы используете href, когда должны использовать компонент React Router - Link.

    Это что такое?
    <Route exact path='/contacts' Component={Contacts} />
    // Component={Contacts} ???

    Попробуйте так (если App является корневым компонентом):
    import React from 'react';
    import {BrowserRouter as Router, Routes, Route, Link} from 'react-router-dom';
    import './App.scss';
    
    import Header from './components/Header';
    import Service from './pages/Service';
    import Contacts from './pages/Contacts';
    import Login from './pages/Login';
    import Home from './pages/Home';
    
    function App() {
      return (
        <Router>
          <div className="App">
            <Header />
    
            <nav>
              <Link to="/">Главная</Link>
              <Link to="/service">Услуги</Link>
              <Link to="/contacts">Контакты</Link>
              <Link to="/login">Вход</Link>
            </nav>
    
            <Routes>
              <Route path="/" element={<Home />} />
              <Route path="/service" element={<Service />} />
              <Route path="/contacts" element={<Contacts />} />
              <Route path="/login" element={<Login />} />
    
              <Route path="*" element={<NotFoundRoute/>} />
            </Routes>
          </div>
        </Router>
      );
    }
    
    // not fount route handler
    function NotFoundRoute() {
      return <div>Page not found</div>;
    }
    
    export default App;

    Header.js:
    import {Link} from "react-router-dom";
    
    function Header(props) {
      return (
        <>
          <header>
            // ...
    
            <Link to="/service">Услуги</Link>
            <Link to="/contacts">Контакты</Link>
    
            // ...
          </header>
        </>
      )
    }
    
    export default Header;
    Ответ написан
    Комментировать
  • Как остановить скролл на последнем фрейме?

    Lapita12
    @Lapita12
    Тесты, тесты?
    let zSpacing = -1000,
      lastPos = zSpacing / 5,
      $frames = document.getElementsByClassName('frame'),
      frames = Array.from($frames),
      zVals = [];
    
    const lastFrame = $frames[$frames.length - 1];
    const lastFrameHeight = lastFrame.offsetHeight;
    const lastFrameTop = lastFrame.offsetTop;
    
    window.onscroll = function() {
      let top = document.documentElement.scrollTop,
        delta = lastPos - top
      lastPos = top
    
      frames.forEach(function(n, i) {
        zVals.push((i * zSpacing) + zSpacing)
        zVals[i] += delta * -5.5
        let frame = frames[i],
          transform = `translateZ(${zVals[i]}px)`,
        opacity = zVals[i] < Math.abs(zSpacing) / 1.8 ? 1 : 0
        
        frame.setAttribute('style', `transform: ${transform}; opacity: ${opacity};`);
      });
    
      if (top + window.innerHeight >= lastFrameTop + lastFrameHeight) {
        window.scrollTo(0, lastFrameTop);
      }
    };
    
    window.scrollTo(0, 1);
    
    let soundbutton = document.querySelector('.soundbutton'),
        audio = document.querySelector('.audio')
    
    soundbutton.addEventListener('click', e =>{
      soundbutton.classList.toggle('paused')
      audio.paused ? audio.play() : audio.pause()
    })
    
    window.onfocus = function(){
      soundbutton.classList.contains('paused') ? audio.pause() : audio.play()
    }
    
    window.onblur = function() {
      audio.pause()
    }
    Ответ написан
    5 комментариев
  • Почему не работает Math.floor()?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    a /= b;
    a = Math.floor(a*100)/100;
    Ответ написан
    Комментировать
  • Почему выводит не совсем правильно?

    Vindicar
    @Vindicar
    RTFM!
    Ты забыл последнюю сторону многоугольника.
    p += len_seg(x[-1],y[-1],x[0],y[0])
    Ответ написан
    Комментировать
  • Почему Не работает код?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Почему Не работает код?
    - потому что на первом сайте внесли косметические изменения, добавили блоки и д.т.
    Неделю назад на сайте был только один div с классом 'sppb-container-inner', а сегодня - уже 4. Но метод find находит только первый тег на странице, не зависимо от общего количества.

    В качестве временного решения можно заменить метод find методом select_one:
    # container = soup.find_all('div', class_='sppb-container-inner')
    container = soup.select_one('div.sppb-row-container:nth-child(4) > div:nth-child(1)')
    Ответ написан
    Комментировать
  • При парсинге всё вписалось без пробелов?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://koronavirusa.site/ru'
    page = requests.get(url)
    soup = BeautifulSoup(page.text, "html.parser")
    container = soup.find('div', class_='sppb-container-inner')
    data = container.find_all('div',class_='sppb-animated-number')
    
    infected = data[0].text
    died = data[1].text
    healed = data[2].text
    
    print(f'''Заражено: {infected}
    Умерло: {died}
    Выздоровело: {healed}''')

    Заражено: 1,990,746
    Умерло: 125,919
    Выздоровело: 466,997
    Ответ написан
    2 комментария